OBJECT Report 50006 Export Items by IPG to Excel 2
{
  OBJECT-PROPERTIES
  {
    Date=22/06/15;
    Time=08:48:39;
    Modified=Yes;
    Version List=NAVW17.10.00,ADC01;
  }
  PROPERTIES
  {
    CaptionML=[ENU=Export Items by IPG to Excel 2;
               ENG=Export Items by IPG to Excel 2];
    ProcessingOnly=Yes;
    OnPreReport=BEGIN
                  RowNo := 0;
                  HeaderRowNo := 0;
                  SheetName := '';
                  TempExcelBuffer.DELETEALL;
                END;

    OnPostReport=BEGIN
                   IF SheetName <> '' THEN BEGIN
                     TempExcelBuffer.CreateBook(SheetName);
                     TempExcelBuffer.WriteSheet(SheetName,COMPANYNAME,USERID);
                     TempExcelBuffer.CloseBook;
                     TempExcelBuffer.OpenExcel;
                     TempExcelBuffer.GiveUserControl;
                   END;
                 END;

  }
  DATASET
  {
    { 9057229; ;DataItem;IPG                 ;
               DataItemTable=Table94;
               DataItemTableView=SORTING(Code);
               ReqFilterFields=Code }

    { 1   ;1   ;DataItem;                    ;
               DataItemTable=Table27;
               DataItemTableView=SORTING(Inventory Posting Group);
               OnPreDataItem=BEGIN
                               IF COUNT = 0 THEN
                                 CurrReport.SKIP;

                               Window.OPEN(
                                 Text000 +
                                 '@1@@@@@@@@@@@@@@@@@@@@@\');
                               Window.UPDATE(1,0);
                               TotalRecNo := COUNT;
                               RecNo := 0;

                               AddSheet(IPG.Code);
                             END;

               OnAfterGetRecord=BEGIN
                                  RecNo := RecNo + 1;
                                  Window.UPDATE(1,ROUND(RecNo / TotalRecNo * 10000,1));
                                  AddLine;
                                END;

               OnPostDataItem=BEGIN
                                CloseSheet;
                                Window.CLOSE;
                              END;

               ReqFilterFields=Location Filter,Date Filter;
               DataItemLink=Inventory Posting Group=FIELD(Code) }

  }
  REQUESTPAGE
  {
    PROPERTIES
    {
    }
    CONTROLS
    {
      { 1000000001;;Container;
                  Name=ContentArea;
                  ContainerType=ContentArea }

    }
  }
  LABELS
  {
  }
  CODE
  {
    VAR
      Text000@1000 : TextConst 'ENU=Analyzing Data...\\;ENG=Analysing Data...\\';
      Text001@1001 : TextConst 'ENU=Filters;ENG=Filters';
      TempExcelBuffer@1006 : TEMPORARY Record 370;
      Window@9057229 : Dialog;
      ServerFileName@1008 : Text;
      SheetName@1011 : Text[250];
      RecNo@9057230 : Integer;
      TotalRecNo@9057231 : Integer;
      RowNo@1000000021 : Integer;
      SheetRowNo@9057234 : Integer;
      Text002@1000000001 : TextConst 'ENU=Totals For %1';
      Text003@1000000006 : TextConst 'ENU=Av. Purch. Cost (LCY)';
      Text004@1000000007 : TextConst 'ENU=Av. Sale Price. (LCY)';
      TextSum@1000000000 : TextConst 'ENU="=SUM(%1:%2)"';
      TextAverage@1000000005 : TextConst 'ENU="=IF(%1=0,0,ROUND(%2/%1,2))"';
      AmtFormat@1000000002 : TextConst 'ENU="0.00_ ;[Red]-0.00"';
      QtyFormat@1000000003 : TextConst 'ENU="0_ ;[Red]-0"';
      HeaderRowNo@1000000004 : Integer;

    LOCAL PROCEDURE AddHeader@1000000000();
    BEGIN
      //Sheet One Filter Fields or Header
      RowNo := 0;
      IF IPG.GETFILTER(Code) <> '' THEN BEGIN
        RowNo := RowNo + 1;
        SheetRowNo := SheetRowNo + 1;
        EnterFilterInCell(RowNo,
          IPG.GETFILTER(Code),
          Item.FIELDCAPTION("Inventory Posting Group"),
          '',
          TempExcelBuffer."Cell Type"::Text
        );
      END;

      IF Item.GETFILTER("Location Filter") <> '' THEN BEGIN
        RowNo := RowNo + 1;
        SheetRowNo := SheetRowNo + 1;
        EnterFilterInCell(RowNo,
          Item.GETFILTER("Location Filter"),
          Item.FIELDCAPTION("Location Filter"),
          '',
          TempExcelBuffer."Cell Type"::Text
        );
      END;

      IF Item.GETFILTER("Date Filter") <> '' THEN BEGIN
        RowNo := RowNo + 1;
        SheetRowNo := SheetRowNo + 1;
        EnterFilterInCell(RowNo,
          Item.GETFILTER("Date Filter"),
          Item.FIELDCAPTION("Date Filter"),
          '',
          TempExcelBuffer."Cell Type"::Text
        );
      END;

      IF RowNo > 0 THEN BEGIN
        RowNo := RowNo + 1;
        SheetRowNo := SheetRowNo + 1;
      END;
    END;

    LOCAL PROCEDURE AddColumnHeaders@1000000001();
    VAR
      TempStr@1000000000 : Text[250];
    BEGIN
      RowNo := RowNo + 1;
      SheetRowNo := SheetRowNo + 1;
      HeaderRowNo := SheetRowNo;
      WITH Item DO BEGIN
        EnterCell(RowNo,1,FIELDCAPTION("No."),FALSE,FALSE,TRUE,'@',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,2,FIELDCAPTION(Description),FALSE,FALSE,TRUE,'@',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,3,FIELDCAPTION(Blocked),FALSE,FALSE,TRUE,'@',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,4,FIELDCAPTION("Purchases (Qty.)"),FALSE,FALSE,TRUE,'',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,5,FIELDCAPTION("Purchases (LCY)"),FALSE,FALSE,TRUE,'',TempExcelBuffer."Cell Type"::Text);
        //Average Purchase Price
        EnterCell(RowNo,6,Text003,FALSE,FALSE,TRUE,'',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,7,FIELDCAPTION("Positive Adjmt. (Qty.)"),FALSE,FALSE,TRUE,'',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,8,FIELDCAPTION("Positive Adjmt. (LCY)"),FALSE,FALSE,TRUE,'',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,9,FIELDCAPTION("Negative Adjmt. (Qty.)"),FALSE,FALSE,TRUE,'',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,10,FIELDCAPTION("Negative Adjmt. (LCY)"),FALSE,FALSE,TRUE,'',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,11,FIELDCAPTION("Sales (Qty.)"),FALSE,FALSE,TRUE,'',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,12,FIELDCAPTION("Sales (LCY)"),FALSE,FALSE,TRUE,'',TempExcelBuffer."Cell Type"::Text);
        //Average Sale
        EnterCell(RowNo,13,Text004,FALSE,FALSE,TRUE,'',TempExcelBuffer."Cell Type"::Text);
      END;
    END;

    LOCAL PROCEDURE AddLine@1000000002();
    BEGIN
      RowNo := RowNo + 1;
      SheetRowNo := SheetRowNo + 1;

      WITH Item DO BEGIN
        CALCFIELDS("Purchases (Qty.)","Purchases (LCY)","Positive Adjmt. (Qty.)","Positive Adjmt. (LCY)");
        CALCFIELDS("Negative Adjmt. (Qty.)","Negative Adjmt. (LCY)","Sales (Qty.)","Sales (LCY)","Net Change");
        EnterCell(RowNo,1,"No.",FALSE,FALSE,FALSE,'@',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,2,Description,FALSE,FALSE,FALSE,'@',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,3,FORMAT(Blocked),FALSE,FALSE,FALSE,'@',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,4,FORMAT("Purchases (Qty.)"),FALSE,FALSE,FALSE,QtyFormat,TempExcelBuffer."Cell Type"::Number);
        EnterCell(RowNo,5,FORMAT("Purchases (LCY)"),FALSE,FALSE,FALSE,AmtFormat,TempExcelBuffer."Cell Type"::Number);
        //Average Purchase Price  (Column, Quantity, Amount)
        RowAverage(6,4,5,FALSE,FALSE,FALSE,AmtFormat);
        EnterCell(RowNo,7,FORMAT("Positive Adjmt. (Qty.)"),FALSE,FALSE,FALSE,QtyFormat,TempExcelBuffer."Cell Type"::Number);
        EnterCell(RowNo,8,FORMAT("Positive Adjmt. (LCY)"),FALSE,FALSE,FALSE,AmtFormat,TempExcelBuffer."Cell Type"::Number);
        EnterCell(RowNo,9,FORMAT("Negative Adjmt. (Qty.)"),FALSE,FALSE,FALSE,QtyFormat,TempExcelBuffer."Cell Type"::Number);
        EnterCell(RowNo,10,FORMAT(-"Negative Adjmt. (LCY)"),FALSE,FALSE,FALSE,AmtFormat,TempExcelBuffer."Cell Type"::Number);
        EnterCell(RowNo,11,FORMAT("Sales (Qty.)"),FALSE,FALSE,FALSE,QtyFormat,TempExcelBuffer."Cell Type"::Number);
        EnterCell(RowNo,12,FORMAT("Sales (LCY)"),FALSE,FALSE,FALSE,AmtFormat,TempExcelBuffer."Cell Type"::Number);
        //Average Sales Price (Column, Quantity, Amount)
        RowAverage(13,11,12,FALSE,FALSE,FALSE,AmtFormat);
      END;
    END;

    LOCAL PROCEDURE AddColumnTotals@1000000003();
    BEGIN
      //Only Add a Valid Total Row
      IF SheetRowNo > HeaderRowNo THEN BEGIN
        RowNo := RowNo + 1;
        EnterCell(RowNo,1,'',FALSE,FALSE,TRUE,'@',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,2,STRSUBSTNO(Text002,IPG.Code),FALSE,FALSE,TRUE,'@',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,3,'',FALSE,FALSE,TRUE,'@',TempExcelBuffer."Cell Type"::Text);
        SumColumn(4,HeaderRowNo+1,SheetRowNo,FALSE,FALSE,TRUE,QtyFormat);
        SumColumn(5,HeaderRowNo+1,SheetRowNo,FALSE,FALSE,TRUE,AmtFormat);
        SumColumn(7,HeaderRowNo+1,SheetRowNo,FALSE,FALSE,TRUE,QtyFormat);
        SumColumn(8,HeaderRowNo+1,SheetRowNo,FALSE,FALSE,TRUE,AmtFormat);
        SumColumn(9,HeaderRowNo+1,SheetRowNo,FALSE,FALSE,TRUE,QtyFormat);
        SumColumn(10,HeaderRowNo+1,SheetRowNo,FALSE,FALSE,TRUE,AmtFormat);
        SumColumn(11,HeaderRowNo+1,SheetRowNo,FALSE,FALSE,TRUE,QtyFormat);
        SumColumn(12,HeaderRowNo+1,SheetRowNo,FALSE,FALSE,TRUE,AmtFormat);

        SheetRowNo := SheetRowNo + 1;
        //Average Purchase Price  (Column, Quantity, Amount)
        RowAverage(6,4,5,FALSE,FALSE,TRUE,AmtFormat);
        //Average Sales Price (Column, Quantity, Amount)
        RowAverage(13,11,12,FALSE,FALSE,TRUE,AmtFormat);
      END;
    END;

    PROCEDURE AddSheet@9057234(NewIPGCode@9057229 : Code[10]);
    BEGIN
      SheetRowNo := 0;

      //Add the Newsheet to the Excel Buffer
      EnterCell(RowNo + 1,0,NewIPGCode,FALSE,FALSE,FALSE,'',TempExcelBuffer."Cell Type"::Text);

      //First Worksheet Only
      IF RowNo = 0 THEN BEGIN
        SheetName := TempExcelBuffer.ValidateSheetName(NewIPGCode);
        AddHeader;
      END;

      AddColumnHeaders;
    END;

    PROCEDURE CloseSheet@9057233();
    BEGIN
      IF (SheetRowNo = 0)OR(HeaderRowNo = 0) THEN
        EXIT;

      //Add Column Totals
      AddColumnTotals;
    END;

    LOCAL PROCEDURE EnterFilterInCell@5(RowNo@1000 : Integer;Filter@1001 : Text[250];FieldName@1002 : Text[100];Format@1003 : Text[30];CellType@1004 : Option);
    BEGIN
      IF Filter <> '' THEN BEGIN
        EnterCell(RowNo,1,FieldName,FALSE,FALSE,FALSE,'',TempExcelBuffer."Cell Type"::Text);
        EnterCell(RowNo,2,Filter,FALSE,FALSE,FALSE,Format,CellType);
      END;
    END;

    LOCAL PROCEDURE EnterCell@2(RowNo@1000 : Integer;ColumnNo@1001 : Integer;CellValue@1002 : Text[250];Bold@1003 : Boolean;Italic@1004 : Boolean;UnderLine@1005 : Boolean;Format@1006 : Text[30];CellType@1007 : Option);
    BEGIN
      TempExcelBuffer.INIT;
      TempExcelBuffer.VALIDATE("Row No.",RowNo);
      TempExcelBuffer.VALIDATE("Column No.",ColumnNo);
      TempExcelBuffer."Cell Value as Text" := CellValue;
      TempExcelBuffer.Formula := '';
      TempExcelBuffer.Bold := Bold;
      TempExcelBuffer.Italic := Italic;
      TempExcelBuffer.Underline := UnderLine;
      TempExcelBuffer.NumberFormat := Format;
      TempExcelBuffer."Cell Type" := CellType;
      TempExcelBuffer.INSERT;
    END;

    LOCAL PROCEDURE EnterFormulaInCell@9057235(RowNo@1000 : Integer;ColumnNo@1001 : Integer;FormulaValue@1002 : Text[250];Bold@1003 : Boolean;Italic@1004 : Boolean;UnderLine@1005 : Boolean;Format@1006 : Text[30];CellType@1007 : Option);
    BEGIN
      TempExcelBuffer.INIT;
      TempExcelBuffer.VALIDATE("Row No.",RowNo);
      TempExcelBuffer.VALIDATE("Column No.",ColumnNo);
      TempExcelBuffer."Cell Value as Text" := '';
      TempExcelBuffer.Formula := FormulaValue;
      TempExcelBuffer.Bold := Bold;
      TempExcelBuffer.Italic := Italic;
      TempExcelBuffer.Underline := UnderLine;
      TempExcelBuffer.NumberFormat := Format;
      TempExcelBuffer."Cell Type" := CellType;
      TempExcelBuffer.INSERT;
    END;

    PROCEDURE SumColumn@1000000004(ColNo@1000000000 : Integer;StartRowNo@1000000001 : Integer;EndRowNo@1000000002 : Integer;Bold@1000000008 : Boolean;Italic@1000000007 : Boolean;UnderLine@1000000006 : Boolean;Format@1000000009 : Text[30]);
    VAR
      ExcelBuffer@1000000003 : TEMPORARY Record 370;
      FormulaText@1000000005 : Text;
    BEGIN
      IF (ColNo = 0)OR(StartRowNo = 0)OR(EndRowNo = 0)OR(EndRowNo < StartRowNo) THEN
        EXIT;

      FormulaText := (
                      STRSUBSTNO(
                        TextSum,
                        ExcelBuffer.GetCellID(ColNo,StartRowNo),
                        ExcelBuffer.GetCellID(ColNo,EndRowNo)
                      )
                    );

      EnterFormulaInCell(RowNo,ColNo,FormulaText,Bold,Italic,UnderLine,Format,TempExcelBuffer."Cell Type"::Number);
    END;

    PROCEDURE SumRow@1000000010(ColNo@1000000000 : Integer;StartColNo@1000000001 : Integer;EndColNo@1000000002 : Integer;Bold@1000000008 : Boolean;Italic@1000000007 : Boolean;UnderLine@1000000006 : Boolean;Format@1000000009 : Text[30]);
    VAR
      ExcelBuffer@1000000003 : TEMPORARY Record 370;
      FormulaText@1000000005 : Text;
    BEGIN
      IF (ColNo = 0)OR(StartColNo = 0)OR(EndColNo = 0)OR(EndColNo < StartColNo) THEN
        EXIT;

      FormulaText := (
                      STRSUBSTNO(
                        TextSum,
                        ExcelBuffer.GetCellID(StartColNo,SheetRowNo),
                        ExcelBuffer.GetCellID(EndColNo,SheetRowNo)
                      )
                    );

      EnterFormulaInCell(RowNo,ColNo,FormulaText,Bold,Italic,UnderLine,Format,TempExcelBuffer."Cell Type"::Number);
    END;

    PROCEDURE RowAverage@1000000008(ColNo@1000000000 : Integer;StartColNo@1000000001 : Integer;EndColNo@1000000002 : Integer;Bold@1000000008 : Boolean;Italic@1000000007 : Boolean;UnderLine@1000000006 : Boolean;Format@1000000009 : Text[30]);
    VAR
      ExcelBuffer@1000000003 : TEMPORARY Record 370;
      FormulaText@1000000005 : Text;
    BEGIN
      IF (ColNo = 0)OR(StartColNo = 0)OR(EndColNo = 0)OR(EndColNo < StartColNo) THEN
        EXIT;

      FormulaText := (
                      STRSUBSTNO(
                        TextAverage,
                        ExcelBuffer.GetCellID(StartColNo,SheetRowNo),
                        ExcelBuffer.GetCellID(EndColNo,SheetRowNo)
                      )
                    );

      EnterFormulaInCell(RowNo,ColNo,FormulaText,Bold,Italic,UnderLine,Format,TempExcelBuffer."Cell Type"::Number);
    END;

    BEGIN
    END.
  }
  RDLDATA
  {
  }
}

